format 75
"security" // iplan::security
  revision 18
  modified_by 5 "jviqueira"
  // class settings
  //class diagram settings
  draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
  //use case diagram settings
  package_name_in_tab default show_context default auto_label_position default draw_all_relations default class_drawing_mode default shadow default show_stereotype_properties default
  //sequence diagram settings
  show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default show_class_context_mode default show_msg_context_mode default
  //collaboration diagram settings
  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default show_msg_context default draw_all_relations default shadow default show_stereotype_properties default
  //object diagram settings
   write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
  //component diagram settings
  package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
  draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
  //deployment diagram settings
  package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
  draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
  //state diagram settings
  package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
  show_activities default region_horizontally default drawing_language default show_stereotype_properties default
  //activity diagram settings
  package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
  show_infonote default drawing_language default show_stereotype_properties default
  
  php_dir "iplan/security"
  php_namespace "iplan\\security"
  classview 167173 "Security Diagram"
    //class diagram settings
    draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
    //collaboration diagram settings
    show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default show_msg_context default draw_all_relations default shadow default show_stereotype_properties default
    //object diagram settings
     write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
    //sequence diagram settings
    show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default show_class_context_mode default show_msg_context_mode default
    //state diagram settings
    package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
    show_activities default region_horizontally default drawing_language default show_stereotype_properties default
    //class settings
    //activity diagram settings
    package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
    show_infonote default drawing_language default show_stereotype_properties default
    associated_deployment_view deploymentview_ref 167429 // Security Deployment
    classdiagram 160773 "Security Classes"
      draw_all_relations no hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
      comment "La idea de las clases de seguridad es administrar usuarios, mdulos (por ahora no existen como tal pero un Facade y sus incumbencias se le parece) y permisos del sistema; as como tambin provee el objeto central que \"pega\" toda la aplicacin y provee de un contexto

Hay un conjunto de entidades que son persistentes: User, Profile, Action y Facade; las otras son propias de la aplicacin web. Todas las representaciones se contrajeron a su mnima expresin, es decir que no cuentan con informacin de metadata como \"fecha de creacin\", \"fecha de modificacin\", etc..., ni de histricos dado que eso se deja para una mejora posterior o su implementacin en ORMObject (en forma uniforme para todo).

Un usuario puede tener varios perfiles asociados, dichos perfiles tienen \"acciones\". La misma accin puede formar parte de ms de un perfil, de modo que queda:
User <- M:N -> Profile <- M:N -> Action

La Accin:
Al final se consolid como una sola cosa que consta de un nombre \"humano\", una descripcin ms detallada y un cdigo de URL que es una abreviatura a usar en la URL para dicho comando. La accin se puede llamar para que devuelva un HTML o se puede llamar como AJAX, para que devuelva un XML vlido.
En realidad en ambos casos lo que obtiene es un \"Renderable\" sobre el cual se llama a ->display() para HTML o ->parse() para XML.

El urlCode lo autogenera el sistema de modo tal que no se repita y que desde afuera de la aplicacin no se sepa de que se trata. En los templates se puede usar el alias del Facade \".method\" para indicar la accin del sistema. Nota: los urlCode NO PUEDEN modificarse, dado que el hacerlo hara necesario limpiar toda la cach de templates para que efectivamente las referencias se refresquen.

Si se mira desde el punto de vista de HTML, el concepto sobre el cual se basa la accin es que cualquier cosa que se haga en la aplicacin muestra una pantalla (aunque sea de error) y que algo similar sucede en el AJAX, pero en vez de devolver HTML es un XML ms sencillo. Volviendo al HTML un ejemplo sera:

URL-> index.php		se instancia una Application y al no haber accin en forma predeterminada llama a la Action predeterminada: login
Action:login->do()		hace un 
	require_once(facade->file)
			luego llama a 
	facade->class:method()	retorna un Renderable
			retorna el Renderable obtenido
Context:set(Renderable::params);
Dependiendo de:
case AJAX:
	templateXML->setContent(Renderable->template); END
case HTML:
	templateHTML->setContent(Renderable->template); END

El Facade:
Lo que en otros frameworks sera un mdulo ac no existe, pero hay un \"Facade\" que se puede registrar indicando un archivo PHP donde se define una clase hija de AbstractManager. Dicha implementacin define una funcin listMethods() que se emplea al crear (registrar) acciones nuevas. El listMethods() se usa porque dentro del Facade pueden existir mtodos que sean de uso interno.

Se puede agregar un Facade y luego las acciones de dicho Facade estarn disponibles para optarse desde la lista de acciones.
La \"Application\" es responsable de cargar todos los Facade que puede ver el usuario y obtener los alias.
Obviamente algunos datos iniciales deben ser cargados en la base de datos tales como el \"Admin\" y sus permisos bsicos.


"
      size A4
    end

    class 396165 "User"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 437509 "name"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $name el nombre real del usuario"
      end

      attribute 437637 "surname"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $surname el apellido real del usuario"
      end

      attribute 437765 "username"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $username el nombre de usuario escogido por o para el usuario"
      end

      attribute 437893 "password"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $password el hash de la clave del usuario"
      end

      classrelation 506629 // <generalisation>
	relation 504837 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 506629 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      classrelation 507141 // profiles (<unidirectional association>)
	relation 505349 --->
	  a role_name "profiles" multiplicity "*" protected
	    comment "@var array $profiles la lista de perfiles que tiene habilitado el usuario"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 507141 // profiles (<unidirectional association>)
	  b parent class_ref 396293 // Profile
      end

      operation 679813 "define"
	preserve_cpp_body_indent cpp_virtual public return_type class_ref 236293 // ORMDefinition
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.

@return ORMDefinition la definicin default"
      end
    end

    class 396293 "Profile"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 438149 "name"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 438277 "description"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      classrelation 541317 // users (<unidirectional association>)
	relation 539397 --->
	  a role_name "users" multiplicity "*" protected
	    comment "@var array $users la lista de usuarios del perfil"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 541317 // users (<unidirectional association>)
	  b parent class_ref 396165 // User
      end

      classrelation 506757 // <generalisation>
	relation 504965 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 506757 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      classrelation 507013 // actions (<directional aggregation>)
	relation 505221 o-->
	  a role_name "actions" multiplicity "*" protected
	    comment "@var array $actions la lista de acciones relacionadas al perfil
"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 507013 // actions (<directional aggregation>)
	  b parent class_ref 396421 // Action
      end

      operation 679941 "define"
	preserve_cpp_body_indent cpp_virtual public return_type class_ref 236293 // ORMDefinition
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.

@return ORMDefinition la definicin default"
      end
    end

    class 396421 "Action"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 438533 "description"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 438405 "name"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 445829 "method"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $method el mtodo a llamar"
      end

      attribute 438661 "urlCode"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string un cdigo textual del comando"
      end

      attribute 465925 "hint"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string un texto para mostrar en los componentes que realicen o ejecuten esta accin"
      end

      classrelation 506885 // <generalisation>
	relation 505093 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 506885 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      classrelation 513797 // <dependency>
	relation 512005 -_->
	  a default
	    php "${type}"
	    classrelation_ref 513797 // <dependency>
	  b parent class_ref 410117 // Renderable
      end

      classrelation 514053 // facade (<unidirectional association>)
	relation 512261 --->
	  a role_name "facade" multiplicity "1" protected
	    comment "@var Facade $facade Una representacin de la clase a ser invocada y su definicin"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 514053 // facade (<unidirectional association>)
	  b parent class_ref 410245 // Facade
      end

      classrelation 541445 // profiles (<unidirectional association>)
	relation 539525 --->
	  a role_name "profiles" multiplicity "*" protected
	    comment "@var array $profiles la lista de perfiles que utilizan la accin"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 541445 // profiles (<unidirectional association>)
	  b parent class_ref 396293 // Profile
      end

      operation 658181 "execute"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Invoca a las funciones que realizan la accin y retorna un Renderable con el resultado.
No me dej ponerle \"do()\" porque \"do\" est reservado :S

@return Renderable el objeto que renderiza la salida."
      end

      operation 680069 "define"
	preserve_cpp_body_indent cpp_virtual public return_type class_ref 236293 // ORMDefinition
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.

@return ORMDefinition la definicin default"
      end
    end

    class 410117 "Renderable"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 445189 "template"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 445317 "params"
	protected explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      operation 664837 "__construct"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "templateName" explicit_type "string"
	  param in name "arguments" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "@param string $templateName el nombre o alias del template definido en el Facade
@param array $arguments los argumentos que sern traducidos a variables para el template
@return Renderable Una clase capaz de renderizar el template."
      end
    end

    class 410245 "Facade"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 445445 "class"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $class el nombre de la clase \"Facade\""
      end

      attribute 445573 "file"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string file el archivo donde se encuentra el facade"
      end

      classrelation 514181 // <generalisation>
	relation 512389 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 514181 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      attribute 452613 "alias"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $alias un ttulo descriptivo para el usuario"
      end

      operation 680197 "define"
	preserve_cpp_body_indent cpp_virtual public return_type class_ref 236293 // ORMDefinition
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.

@return ORMDefinition la definicin default"
      end
    end

    class 416901 "AbstractManager"
      abstract visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      classrelation 527749 // application (<unidirectional association>)
	relation 525957 --->
	  a role_name "application" private
	    comment "@var Application la instancia de la aplicacin que maneja la clase"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 527749 // application (<unidirectional association>)
	  b parent class_ref 423557 // Application
	set_oper operation_ref 679557 // setApplication
      end

      operation 679557 "setApplication"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" type class_ref 423557 // Application
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->application = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_relation classrelation_ref 527749 // application (<unidirectional association>)
      end

      operation 679685 "listMethods"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna una lista de mtodos que pueden ser invocados desde la aplicacin.

@return array Un arreglo (clave, valor) donde la clave es un string con el nombre ficticio de la operacin y el valor el nombre del mtodo que le corresponde."
      end
    end

    class 417029 "Context"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 486021 "application"
	private type class_ref 423557 // Application
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var iplan\\security\\Application la aplicacin que gener el contexto"
      end

      attribute 452741 "user"
	private type class_ref 396165 // User
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 707845 // getUser
	comment "@var User el usuario logueado o null si no se inici sesin"
      end

      attribute 452869 "globals"
	private explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@param array $globals un arreglo donde se almacenan las variables de sesin y otros que se quieran pasar globalmente a travs de la sesin"
      end

      operation 707461 "__construct"
	preserve_cpp_body_indent public return_type class_ref 417029 // Context
	nparams 2
	  param in name "application" type class_ref 423557 // Application
	  param in name "user" type class_ref 396165 // User
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea el contexto de la aplicacin para el usuario indicado.
@param iplan\\security\\Application $application la aplicacin a la cual pertenece el contexto
@param iplan\\security\\User $user el usuario de la aplicacin

@return iplan\\security\\Context El contexto de la aplicacin."
      end

      operation 672389 "set"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 2
	  param in name "name" explicit_type "string"
	  param in name "value" explicit_type "mixed"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Guarda un valor en la sesin activa.

@param string $name el nombre de la variable de sesin cuyo valor se quiere establecer
@param mixed $value el valor de dicha variable, si se deja en null se borra la variable

@return boolean Un indicador del resultado de la operacin. Si es False quiere decir que no se efectu."
      end

      operation 707589 "get"
	preserve_cpp_body_indent public explicit_return_type "mixed"
	nparams 1
	  param in name "name" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera una variable del contexto de la aplicacin.

@param string $name el nombre de la variable a recuperar.

@return mixed El valor que tuviese configurado dicha propiedad o una excepcin en caso de que la misma no est definida."
      end

      operation 707845 "getUser"
	force_body_gen const cpp_inline public return_type class_ref 396165 // User
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->user;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 452741 // user
      end

      operation 708101 "getParam"
	preserve_cpp_body_indent public explicit_return_type "mixed"
	nparams 3
	  param in name "name" explicit_type "string"
	  param in name "default" explicit_type "mixed"
	    defaultvalue "null"
	  param in name "where" explicit_type "string"
	    defaultvalue "'PGR'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera un parmetro pasado al script.

@param string $name el nombre del parmetro
@param mixed $default el valor a devolver en caso que el parmetro no se encuentre
@param string $where un string que indica en qu contexto buscar: P=POST, G=GET, R=REQUEST

@return mixed El valor recuperado"
      end
    end

    class 423557 "Application"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 472709 "instance"
	private type class_ref 423557 // Application
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var Application variable que alberga la instancia de la aplicacin"
      end

      attribute 459397 "orm"
	private type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 679173 // getORM
	comment "@var ORM la instancia del manejador de objetos de la aplicacin"
      end

      attribute 472581 "twig"
	private explicit_type ""
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var Twig_Environment la instancia del motor de templates"
      end

      classrelation 541573 // menus (<directional composition>)
	relation 539653 *-->
	  a role_name "menus" multiplicity "1..*" private
	    comment "@var array la lista de menus de la aplicacin"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 541573 // menus (<directional composition>)
	  b parent class_ref 430085 // Menu
      end

      classrelation 527365 // context (<unidirectional association>)
	relation 525573 --->
	  a role_name "context" multiplicity "1" private
	    comment "@var Enviroment una instancia con los valores globales registrados por los usuarios"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 527365 // context (<unidirectional association>)
	  b parent class_ref 417029 // Context
      end

      operation 693253 "__construct"
	preserve_cpp_body_indent private explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 693381 "getInstance"
	class_operation preserve_cpp_body_indent public return_type class_ref 423557 // Application
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la aplicacin actual o, en caso de no existir, genera una nueva.

@return Application La instancia de la aplicacin"
      end

      operation 679173 "getORM"
	force_body_gen const cpp_inline public return_type class_ref 167685 // ORM
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->orm;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 459397 // orm
	comment "Retorna la instancia ORM de la aplicacin.

@return ORM El ORM de la aplicacin."
      end

      operation 679301 "getParam"
	preserve_cpp_body_indent public explicit_return_type "mixed"
	nparams 3
	  param in name "name" explicit_type "string"
	  param in name "default" explicit_type "mixed"
	    defaultvalue "null"
	  param in name "where" explicit_type "string"
	    defaultvalue "'PGR'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera un parmetro pasado al script.

@param string $name el nombre del parmetro
@param mixed $default el valor a devolver en caso que el parmetro no se encuentre
@param string $where un string que indica en qu contexto buscar: P=POST, G=GET, R=REQUEST

@return mixed El valor recuperado"
      end

      operation 707717 "getContext"
	preserve_cpp_body_indent public return_type class_ref 417029 // Context
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera el contexto de la aplicacin.

@return iplan\\security\\Context El contexto de la aplicacin."
      end

      operation 679045 "parseParams"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Verifica qu se debe hacer segn los parmetros de la URL.

@return boolean True si todo anda bien, False sino."
      end

      operation 693509 "install"
	class_operation preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "ATENCIN: DROPEA TODAS LAS TABLAS, RELACIONES, CONTRAINTS Y GENERADORES.

Mtodo para generar los valores iniciales en las tablas:
- Usuarios: Admin, Client
- Profiles: Administrator, Client
- Actions: Login, Logout
- Facades: GeneralManager, UserManager

@return boolean retorna true para el caso que todo salga bien"
      end

      classrelation 527877 // <dependency>
	relation 526085 -_->
	  a default
	    php "${type}"
	    classrelation_ref 527877 // <dependency>
	  b parent class_ref 416901 // AbstractManager
      end
    end

    class 430085 "Menu"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 466053 "name"
	private explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      classrelation 534405 // <generalisation>
	relation 532613 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 534405 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      classrelation 534533 // action (<directional aggregation>)
	relation 532741 o-->
	  a role_name "action" multiplicity "1" protected
	    comment "@var Action $action la accin que ejecuta el men"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 534533 // action (<directional aggregation>)
	  b parent class_ref 396421 // Action
      end
    end

    class 430213 "GeneralManager"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      classrelation 534661 // <generalisation>
	relation 532869 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 534661 // <generalisation>
	  b parent class_ref 416901 // AbstractManager
      end

      operation 686725 "mailTo"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 6
	  param in name "from" explicit_type "string"
	  param in name "to" explicit_type "array"
	  param in name "title" explicit_type "string"
	  param in name "body" explicit_type "string"
	  param in name "cc" explicit_type "array"
	    defaultvalue "null"
	  param in name "bcc" explicit_type "array"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Enva un email a travs del smtp del sistema.

@param string $from la direccin de correo remitente. Puede usarse el formato \"Nombre\" <mail@dominio> (el nombre incluye las comillas)
@param array $to una lista de direcciones a las cuales enviar el mensaje, cada direccin de correo destino se rigue bajo las mismas reglas de formato de $from
@param string $title el ttulo del mensaje
@param string $body el cuerpo del mensaje, puede ser cdigo html
@param array $cc la lista de destinatarios con copia, puede usar formato \"Nombre\" <mail@dominio>
@param array $bcc la lista de destinatarios con copia oculta, puede usar el formato anterior
"
      end

      operation 714885 "html"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 1
	  param in name "text" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte una cadena de texto a su equivalente en HTML pero con los caracteres especiales escapados.
@pram string $text el texto a codificar

return string La cadena original con los caracteres especiales codificados como entidades HTML."
      end
    end

    class 410373 "SecurityManager"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      operation 707333 "__construct"
	preserve_cpp_body_indent public return_type class_ref 410373 // SecurityManager
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Constructor de la clase"
      end

      operation 707205 "listMethods"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna una lista de mtodos que pueden ser invocados desde la aplicacin.

@return array Un arreglo (clave, valor) donde la clave es un string con el nombre ficticio de la operacin y el valor el nombre del mtodo que le corresponde."
      end

      operation 708229 "defaultPage"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 1
	  param inout name "context" type class_ref 417029 // Context
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Muesta la home page que se ve sin iniciar sesin.
@param iplan\\security\\Context $context el contexto donde se solicit la accin.

@return iplan\\security\\renderable La pgina en cuestin."
      end

      operation 671621 "login"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 1
	  param inout name "context" type class_ref 417029 // Context
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Accin que intenta autenticar un usuario en el sistema o, en caso que se llame sin parmetros, devuelve el formulario de login.

@param iplan\\security\\Context $context el contexto donde se solicit la accin.

@return Renderable Si la autenticacin es concretada correctamente retorna un Renderable con la pgina principal de la aplicacin, sino remite de nuevo al login (si hubo error con un mensaje, sino vaco)."
      end

      operation 707973 "mainPage"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 1
	  param inout name "context" type class_ref 417029 // Context
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la pgina principal.
@param iplan\\security\\Context $context el contexto donde se solicit la accin.

@return iplan\\security\\Renderable El objeto que permite mostrar la pgina principal."
      end

      operation 708357 "logout"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 1
	  param inout name "context" type class_ref 417029 // Context
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Termina la sesin y vuelve a la defaultPage.
@param iplan\\security\\Context $context el contexto donde se solicit la accin.
@return iplan\\security\\Renderable La home page que corresponde cuando no se inici sesin."
      end

      operation 671749 "addUser"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 1
	  param inout name "context" type class_ref 417029 // Context
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega un usuario al sistema.

@param iplan\\security\\Context $context el contexto donde se solicit la accin.
@return iplan\\security\\Renderable La pgina de agregado de usuario o la anterior si se completaron los datos."
      end

      operation 672133 "modifyUser"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 1
	  param in name "context" type class_ref 417029 // Context
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la pgina de modificacin de usuario o actualiza sus datos si los mismos son completados.
@param iplan\\security\\Context $context el contexto donde se solicit la accin.

@return iplan\\security\\Renderable El formulario de modificacin de usuario o la pgina anterior si se completaron los datos y la modificacin se hizo con xito."
      end

      operation 672005 "changePassword"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 1
	  param in name "context" type class_ref 417029 // Context
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Cambia la clave del usuario dado.
@param iplan\\security\\Context $context el contexto donde se solicit la accin.

@return Rendereable un mensaje con el resultado de la operacin que luego vuelve a la pgina anterior."
      end

      operation 671877 "deleteUser"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 1
	  param in name "context" type class_ref 417029 // Context
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra un usuario de la base
@param iplan\\security\\Context $context el contexto donde se solicit la accin.

@return Renderable La pantalla en la cual estaba el usuario o un mensaje de error y la pgina anterior."
      end

      classrelation 520709 // <generalisation>
	relation 518917 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 520709 // <generalisation>
	  b parent class_ref 416901 // AbstractManager
      end

      classrelation 527493 // <dependency>
	relation 525701 -_->
	  a default
	    php "${type}"
	    classrelation_ref 527493 // <dependency>
	  b parent class_ref 410117 // Renderable
      end
    end
  end

  deploymentview 167429 "Security Deployment"
    //deployment diagram settings
    package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
    draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
    ncouples 1
    key "uses" value ""
    artifact 304517 "Renderable"
      stereotype "source"
      php_src "<?php
${namespace} 
@{uses}
/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>
"
      associated_classes
	class_ref 410117 // Renderable
      end
    end

    artifact 304773 "AbstractManager"
      stereotype "source"
      php_src "<?php
${namespace} 
@{uses}
/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>
"
      associated_classes
	class_ref 416901 // AbstractManager
      end
    end

    artifact 311429 "Application"
      stereotype "source"
      php_src "<?php
${namespace}
@{uses}
require_once 'lib/krumo/class.krumo.php';
require_once 'lib/Twig/Autoloader.php';


/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>
"
      associated_classes
	class_ref 423557 // Application
      end
      ncouples 1
      key "uses" value "use \\iplan\\orm\\ORM;"
    end

    artifact 311557 "Context"
      stereotype "source"
      php_src "<?php
${namespace} 
@{uses}
/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>
"
      associated_classes
	class_ref 417029 // Context
      end
    end

    artifact 318085 "GeneralManager"
      stereotype "source"
      php_src "<?php
${namespace} 
@{uses}
/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>
"
      associated_classes
	class_ref 430213 // GeneralManager
      end
    end

    artifact 324613 "SecurityManager"
      stereotype "source"
      php_src "<?php
${namespace} 
@{uses}
/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>
"
      associated_classes
	class_ref 410373 // SecurityManager
      end
    end
  end

  deploymentview 173957 "Security Data Deployment"
    //deployment diagram settings
    package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
    draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
    ncouples 1
    key "uses" value "use \\iplan\\orm\\ORMDefinition;"
    artifact 297861 "Action"
      stereotype "source"
      php_src "<?php
${namespace} 
@{uses}
/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>
"
      associated_classes
	class_ref 396421 // Action
      end
    end

    artifact 304389 "Facade"
      stereotype "source"
      php_src "<?php
${namespace} 
@{uses}
/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>
"
      associated_classes
	class_ref 410245 // Facade
      end
    end

    artifact 297733 "Profile"
      stereotype "source"
      php_src "<?php
${namespace} 
@{uses}
/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>
"
      associated_classes
	class_ref 396293 // Profile
      end
    end

    artifact 297605 "User"
      stereotype "source"
      php_src "<?php
${namespace} 
@{uses}
/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>
"
      associated_classes
	class_ref 396165 // User
      end
    end
  end
end
